package bots;

import java.io.Serializable;

import belette.IBelette;
import graphics.DebugDrawable;
import graphics.Drawable;

import utils.Vector2d;

/**
 * Petite interface "indicative" de ce qu'il peut y avoir dans un bot.
 * Il faut aussi g�rer l'ensemble des bots du jeu dans une structure � part.
 *  
 * @author L. Simon, Univ. Paris Sud, 2008
 *
 */
public interface IBot extends Drawable, DebugDrawable, Serializable {
	
	/**
	 * @return Les coordonn�es du bot, ou -1,-1 si pas sur la carte par ex.
	 */
	public Vector2d getCoords();
	
	public int getTeam();
	public void setTeam(int team);
	public int getNewTeam();
	
	/**
	 * On va repr�senter les bots en rond... Pour les collisions sur la carte,
	 * on a besoin du rayon du bot
	 * @return le rayon (en coordonn�es de cartes) du bot
	 */
	public float botRadius();
	
	/**
	 * @return la chaine representant le bot et son etat, pour debug ou autre
	 */
	public String toString();
	
	/**
	 * Mise � jour IA
	 * des decisions � prendre 
	 */
	public void AI();

	/**
	 * Suivant ses decisions et les autres, le bot peut mettre a jour ses positions
	 */
	public void updatePosition();
	
	public void fire();
	
	public void tryToFire();
	
	public void useSpecialAbility();
	
	public void tryToUseSpecialAbility();
	
	public void hitBy(IBelette belette);
	
	public void setAngleWith(Vector2d directionPoint);
	
	public void goTo(Vector2d target);
	
	public Vector2d getVelocity();
	
	public Vector2d getSteering();
	
	public boolean isHuman();
	
	public void setHuman(boolean human);
	
	public boolean isClicked(Vector2d point);	
}
